﻿/*
* jQuery UI Slider Access
* By: Trent Richardson [http://trentrichardson.com]
* Version 0.3
* Last Modified: 10/20/2012
* 
* Copyright 2011 Trent Richardson
* Dual licensed under the MIT and GPL licenses.
* http://trentrichardson.com/Impromptu/GPL-LICENSE.txt
* http://trentrichardson.com/Impromptu/MIT-LICENSE.txt
* 
*/
(function ($) {

    $.fn.extend({
        sliderAccess: function (options) {
            options = options || {};
            options.touchonly = options.touchonly !== undefined ? options.touchonly : true; // by default only show it if touch device

            if (options.touchonly === true && !("ontouchend" in document)) {
                return $(this);
            }

            return $(this).each(function (i, obj) {
                var $t = $(this),
							o = $.extend({}, {
							    where: 'after',
							    step: $t.slider('option', 'step'),
							    upIcon: 'ui-icon-plus',
							    downIcon: 'ui-icon-minus',
							    text: false,
							    upText: '+',
							    downText: '-',
							    buttonset: true,
							    buttonsetTag: 'span',
							    isRTL: false
							}, options),
							$buttons = $('<' + o.buttonsetTag + ' class="ui-slider-access">' +
											'<button data-icon="' + o.downIcon + '" data-step="' + (o.isRTL ? o.step : o.step * -1) + '">' + o.downText + '</button>' +
											'<button data-icon="' + o.upIcon + '" data-step="' + (o.isRTL ? o.step * -1 : o.step) + '">' + o.upText + '</button>' +
										'</' + o.buttonsetTag + '>');

                $buttons.children('button').each(function (j, jobj) {
                    var $jt = $(this);
                    $jt.button({
                        text: o.text,
                        icons: { primary: $jt.data('icon') }
                    })
								.click(function (e) {
								    var step = $jt.data('step'),
												curr = $t.slider('value'),
												newval = curr += step * 1,
												minval = $t.slider('option', 'min'),
												maxval = $t.slider('option', 'max'),
												slidee = $t.slider("option", "slide") || function () { },
												stope = $t.slider("option", "stop") || function () { };

								    e.preventDefault();

								    if (newval < minval || newval > maxval) {
								        return;
								    }

								    $t.slider('value', newval);

								    slidee.call($t, null, { value: newval });
								    stope.call($t, null, { value: newval });
								});
                });

                // before or after					
                $t[o.where]($buttons);

                if (o.buttonset) {
                    $buttons.removeClass('ui-corner-right').removeClass('ui-corner-left').buttonset();
                    $buttons.eq(0).addClass('ui-corner-left');
                    $buttons.eq(1).addClass('ui-corner-right');
                }

                // adjust the width so we don't break the original layout
                var bOuterWidth = $buttons.css({
                    marginLeft: ((o.where === 'after' && !o.isRTL) || (o.where === 'before' && o.isRTL) ? 10 : 0),
                    marginRight: ((o.where === 'before' && !o.isRTL) || (o.where === 'after' && o.isRTL) ? 10 : 0)
                }).outerWidth(true) + 5;
                var tOuterWidth = $t.outerWidth(true);
                $t.css('display', 'inline-block').width(tOuterWidth - bOuterWidth);
            });
        }
    });

})(jQuery);